//行数
var rows = 20;
//列数
var cols = 20;
//雷数
var bombs = 60;

//存放所有td的二维数组
var tds = [];

//记录游戏是否结束
var isOver = false;

//创建扫雷表格
$("<table id='tb'></table>").appendTo($("body"));

for(var i = 0;i<rows;i++){
    
    var $tr = $("<tr></tr>");
    $tr.appendTo($("#tb"));

    var temp = [];

    for(var j = 0;j<cols;j++){
        var $td = $("<td></td>")
        .attr("state","normal")
        .addClass("cell")
        .appendTo($tr);

        $td[0].y = i;
        $td[0].x = j;

        temp.push($td);
    }

    tds.push(temp);
    

}

//随机生成所有类的位置

var nums = [];
for(var i = 0;i<rows*cols;i++){
    nums[i] = i;
}

for(var i = 0;i<bombs;i++){
    var ind = Math.floor(Math.random()*nums.length);
    var n = nums[ind];
    nums.splice(ind,1);

   var r = Math.floor(n/cols);
   var c = n%cols;

   //console.log("第"+r+"行，第"+c+"列");
    //雷的随机位置
   tds[r][c].attr("bomb","yes");
}

//屏蔽右键菜单
$(".cell").on("contextmenu",function(e){
    e.preventDefault();
})

//给所有的td绑定点击事件
$(".cell").on("mousedown",function(e){
    
    if(isOver){
        return;
    }

    if(e.buttons==1){
        //console.log("左键");

        if($(this).attr("state")!="normal"){
            return;
        }
       
        if($(this).attr("bomb")=="yes"){
            $(this).attr("state","bombex");
            gameover($(this));
        
        }else{
            //$(this).attr("state","open");
            //console.log(bombsNearby($(this)));

            openGrid($(this));

            if(checKWin())
            {
                alert("你真是个小机灵鬼儿");
                isOver = true;

            }
    
        }


    }else if(e.buttons==2){
        //console.log("右键");
        if($(this).attr("state")=="normal"){
            $(this).attr("state","flag");
        }else{
            $(this).attr("state","normal");
        }
        
  
    }
});


//计算某个td周围有几颗雷

 function bombsNearby($td){
     var nums = 0;
//     //左上
//     var tx = $td.x - 1;
//     var ty = $td.y - 1;
//     if(tx>=0&&ty>=0){
//         if(tds[ty][tx].attr("bomb")=="yes"){
//             nums++;



for(var i = $td[0].x - 1;i<=$td[0].x + 1;i++){
    for(var j = $td[0].y - 1;j<=$td[0].y + 1;j++){
        if(i==$td[0].x&&j==$td[0].y){
            continue;
        }
        if(i<0||i>=cols||j<0||j>=rows){
            continue;
        }
        if(tds[j][i].attr("bomb")=="yes"){
            nums++;
        }
    }
}
 return nums;
}

//游戏失败函数


function gameover($td){
    for(var i = 0;i<rows;i++){
        for(var j = 0;j<cols;j++){
            if(tds[i][j].attr("bomb")=="yes"){
                tds[i][j].attr("state","bombpl");
            }
        }
    }

    $td.attr("state","bombex");
    alert("GAME OVER");

    isOver = ture;
   
}
    //打开某个格子
    function openGrid($td){
        var num = bombsNearby($td);

        $td.attr("state","b"+num);

        if(num==0){
            for(var i = $td[0].x - 1;i<=$td[0].x + 1;i++){
                for(var j = $td[0].y - 1;j<=$td[0].y + 1;j++){
                    if(i==$td[0].x&&j==$td[0].y){
                        continue;
                    }
                    if(i<0||i>=cols||j<0||j>=rows){
                        continue;
                    }
                    if(tds[j][i].attr("state")=="normal"){
                        openGrid(tds[j][i]);
                    }
                }
            }

        }
    
}

//判断是否胜利的函数
function checKWin(){
    for(var  i = 0;i<rows;i++){
        for(var j = 0;j<cols;j++){
            if(tds[i][j].attr("bomb")!="yes"&&tds[i][j].attr("state")=="normal"){
                return false;
            }
        }
    }
    return true;
}

//重新开始游戏
$("#restart").on("click",function(){
    location.reload();
});